﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Model.Auxiliar;
using Model;
using BLL;
using System.Threading;
using System.Globalization;
using HRP.Utilidades;

namespace HRP.Private.Funcionarios.Controlos
{
    public partial class Editar_Contrato : System.Web.UI.UserControl
    {

        public Funcionario FuncionarioActual { get; set; }
        public string moeda
        {
            get
            {
                if (Session["EmpresaActual"] != null)
                {
                    hrp_empresas empresaActual = (hrp_empresas)Session["EmpresaActual"];
                    return utilidades.ObterMoedaEmpresa(empresaActual.id);
                }
                Response.Redirect("/private/logout.aspx");
                return string.Empty;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            Page.PreRender += Page_PreRender;
        }

        void Page_PreRender(object sender, EventArgs e)
        {
            if (FuncionarioActual != null)
                CarregarContrato();
            else
                LimparDadosContrato();
        }

        private void LimparDadosContrato()
        {
            foreach (Control ctrl in this.Controls)
            {
                if (ctrl.GetType() == typeof(Label))
                {
                    Label lb = (Label)ctrl;
                    lb.Text = string.Empty;
                }
            }
        }

        private string DefaultValue(string valor)
        {
            return string.IsNullOrEmpty(valor) ? "0" : valor;
        }

        public bool GravarAlterações()
        {
            if (Session["EmpresaActual"] != null && Session["idclient"] != null && Session["userid"] != null && Session["FuncionarioId"]!=null)
            {
                int url_contrato = 0;// utilidades.DefinicoesSite.PastaDocumentosMediaNoID;
                string numerouser = Session["userid"].ToString();
                DateTime dataFim = string.IsNullOrEmpty(dataFimContrato.Text.Trim()) ? DefinicoesSite.DataFimAbsurda : Convert.ToDateTime(dataFimContrato.Text.Trim());
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                int clientID = (int)Session["idclient"];
                int funcionarioId = (int)Session["FuncionarioId"];
                hrp_funcionario funcionario = Funcionario_BLL.Instance.ObterFuncionarioPorId(clientID, empresa.id, funcionarioId);

                hrp_contratos contrato = Salario_BLL.Instance.CriarNovoContrato(clientID, empresa.id, funcionarioId,
                     Convert.ToDateTime(dataInicioContrato.Text.Trim()), dataFim, url_contrato, numerouser, Request.UserHostAddress);

                Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-PT");
                var salarioBase = Convert.ToDecimal(salarioBaseTextBox.Text.Trim());


                Salario_BLL.Instance.actualizarSalario(contrato, Convert.ToDecimal(salarioBaseTextBox.Text.Trim()), numerouser, Request.UserHostAddress,
                    Convert.ToDecimal(DefaultValue(subsAlimentacao.Text)), Convert.ToDecimal(DefaultValue(subsProdutividadeTb.Text)), Convert.ToDecimal(DefaultValue(subsDesempenhoTb.Text)), Convert.ToDecimal(DefaultValue(subsAssiduidadeTb.Text)), Convert.ToDecimal(DefaultValue(subsTransporteTb.Text)),
                    Convert.ToDecimal(DefaultValue(subsTurnoTb.Text)), Convert.ToDecimal(DefaultValue(abonoActualTb.Text)), Convert.ToDecimal(DefaultValue(abonoFamiliaTb.Text)), Convert.ToDecimal(DefaultValue(subsChefiaTb.Text)), Convert.ToDecimal(DefaultValue(subs10Tb.Text)),
                    Convert.ToDecimal(DefaultValue(subs5ExpTb.Text)), Convert.ToDecimal(DefaultValue(subs5ContagioTb.Text)), Convert.ToDecimal(DefaultValue(subs3CompTb.Text)), Convert.ToDecimal(DefaultValue(sindicatoTb.Text)),
                    Convert.ToDecimal(DefaultValue(subsNatal.Text)),Convert.ToDecimal(DefaultValue(subsFerias.Text)));

                ActualizarEventos(funcionarioId, Convert.ToDateTime(dataInicioContrato.Text.Trim()), dataFim,
                    funcionario.nome, clientID, empresa.id, numerouser);
                return true;
            }
            return false;
        }

        private void ActualizarEventos(int funcionarioId, DateTime inicio, DateTime fim, string nomeFunc, int clientId, int empresaId, string numerouser)
        {
            List<hrp_eventos_detalhe> listEventos = Evento_BLL.Instance.ObterEventosFuncionario(funcionarioId, 0);
            DateTime dataActual = DateTime.Now;
            foreach (hrp_eventos_detalhe evento in listEventos)
            {
                if (evento.tipo_evento == DefinicoesSite.EventoInicioContratoID || evento.tipo_evento == DefinicoesSite.EventoFimContratoID)
                {
                    Evento_BLL.Instance.ApagarEvento(evento.id, numerouser, Request.UserHostAddress, dataActual);
                }
            }
            Evento_BLL.Instance.AdicionarNovoEvento(nomeFunc + "-Inicio do Contrato", inicio, inicio,
                DefinicoesSite.EventoInicioContratoID, numerouser, dataActual, Request.UserHostAddress, true,
                clientId, empresaId, funcionarioId, string.Empty);
            Evento_BLL.Instance.AdicionarNovoEvento(nomeFunc + "-Fim do Contrato", fim, fim,
                DefinicoesSite.EventoInicioContratoID, numerouser, dataActual, Request.UserHostAddress, true,
                clientId, empresaId, funcionarioId, string.Empty);
        }

        private void CarregarContrato()
        {
            dataFimContrato.Text = FuncionarioActual.Contrato.data_fim.HasValue ? FuncionarioActual.Contrato.data_fim.Value != DefinicoesSite.DataFimAbsurda ?  FuncionarioActual.Contrato.data_fim.Value.ToString(DefinicoesSite.DataFormato) : "" : "";
            dataInicioContrato.Text = FuncionarioActual.Contrato.data_inicio.HasValue ? FuncionarioActual.Contrato.data_inicio.Value.ToString(DefinicoesSite.DataFormato) : "-";
            salarioBaseTextBox.Text = FuncionarioActual.Salario.salario.ToString();
            abonoActualTb.Text = FuncionarioActual.Salario.abono.ToString();
            abonoFamiliaTb.Text = FuncionarioActual.Salario.abono_familia.ToString();
            sindicatoTb.Text = FuncionarioActual.Salario.sindicato.ToString();
            outrosTb.Text = "";
            subs10Tb.Text = FuncionarioActual.Salario.sub10.ToString();
            subs3CompTb.Text = FuncionarioActual.Salario.sub_compensacao.ToString();
            subs5ContagioTb.Text = FuncionarioActual.Salario.sub_contagio.ToString();
            subs5ExpTb.Text = FuncionarioActual.Salario.sub_exposicao.ToString();
            subsAlimentacao.Text = FuncionarioActual.Salario.sub_alimentacao.ToString();
            subsAssiduidadeTb.Text = FuncionarioActual.Salario.sub_assiduidade.ToString();
            subsChefiaTb.Text = FuncionarioActual.Salario.chefia.ToString();
            subsDesempenhoTb.Text = FuncionarioActual.Salario.sub_desempenho.ToString();
            subsProdutividadeTb.Text = FuncionarioActual.Salario.sub_produtividade.ToString();
            subsTransporteTb.Text = FuncionarioActual.Salario.sub_transporte.ToString();
            subsTurnoTb.Text = FuncionarioActual.Salario.sub_turno.ToString();
            subsNatal.Text = FuncionarioActual.Salario.subs_natal.ToString();
            subsFerias.Text = FuncionarioActual.Salario.subs_ferias.ToString();

        }
    }
}